package com.frank.oj.config;

import org.apache.catalina.connector.Connector;
import org.springframework.boot.web.embedded.tomcat.TomcatConnectorCustomizer;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author frank
 * @Date 2024/4/4
 */
@Configuration
public class TomcatConfig {
    /**
     * 配置并返回一个TomcatServletWebServerFactory实例。
     * 这个工厂用于创建Servlet容器，特别地，它通过定制化Connector来配置Tomcat的接受请求的行为。
     *
     * @return TomcatServletWebServerFactory 一个配置了特定行为的TomcatServletWebServerFactory实例。
     */
    @Bean
    public TomcatServletWebServerFactory webServerFactory() {
        TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();

        // 添加一个Connector自定义器，用于配置Tomcat连接器的额外属性。
        factory.addConnectorCustomizers(new TomcatConnectorCustomizer() {
            @Override
            public void customize(Connector connector) {
                // 允许在URL中使用通常被禁止的字符，使得这些字符在请求中可以被安全传输。
                connector.setProperty("relaxedPathChars", "\"<>[\\]^`{|}");
                connector.setProperty("relaxedQueryChars", "\"<>[\\]^`{|}");
                // 允许发送非法的HTTP头而不被拒绝，这在某些特殊情况下可能有用。
                connector.setProperty("rejectIllegalHeader", "false");
            }
        });

        return factory;
    }

}
